home *** CD-ROM | disk | FTP | other *** search
/ Aminet 32 / Aminet 32 (1999)(Schatztruhe)[!][Aug 1999].iso / Aminet / util / libs / graphics3d.lha / doc / graphics3D.h.doc < prev    next >
Encoding:
Text File  |  1998-12-21  |  11.1 KB  |  368 lines

  1. /*
  2. **      $VER: graphics3d.h 10.02 (02.03.98) 
  3. ** 
  4. **      main include file for graphics3d.library
  5. **
  6. **      (C) Copyright 1997 Patrizio Biancalani
  7. **      All Rights Reserved.
  8. */
  9.  
  10. #ifndef GRAPHICS3D_GRAPHICS3D_H
  11. #define GRAPHICS3D_GRAPHICS3D_H
  12.  
  13. #define JAM1 0
  14. #define JAM2 1
  15. #define COMPLEMENT 2
  16. #define INVERSVID 4
  17. #define PROSP_P 0    /* tipo proiezione prospettica */
  18. #define PARAL_P 1    /* tipo proiezione parallela */
  19. #define WIREF    0    /* modo visualizzazione in wire frame */
  20. #define SOLID    2    /* modo visualizzazione in solid */
  21. #define FLAT     1    /* modo visualizzazione in flat shading */
  22. #define GORAUD  3    /* modo visualizzazione in goraud shading */
  23. #define ZPLANE  0       /* #1 modo clippaggio oggetti */
  24. #define FRUSTUM 1       /* #2 modo clippaggio oggetti */
  25. #define SFIXV   8       /* n# di shift per cal. num. virgola fissa */
  26. #define FIXV    256    /* fattore moltipl. per num. virgola fissa */
  27. #define FIXVM   128    /* meta' di FIXV , per effettuare appros.  */
  28. #define MFRAC   FIXV    /* maschera per estrarre parte frazionaria */
  29. #define MINT 0xFFFFFFFF /* maschera per estrarre parte intera */
  30. #define END_T  0    /* fine array tag3d di dati */
  31.  
  32. /* 
  33.   tipi dati per tag3d.tipo riconosciuti attualmente per 
  34.   funzione cascene()
  35. */
  36. #define CS_PROJET 1    /* tipo di proiezione */
  37. #define CS_SBUFF  2     /* attivazione o meno single buffering */
  38. #define CS_GCOLOR 3    /* nuovo colore sfondo box di visualizzazione */
  39. #define CS_VDIST  4    /* nuovo valore distanza da piano di proiezione */
  40. #define CS_NPX0      5     /* nuova posizione X per box di visualizzazione */
  41. #define CS_NPY0   6     /* nuova posizione Y per box di visualizzazione */
  42. #define CS_ZOOM   7    /* nuovo valore per zoom scena */
  43. #define CS_ZBUF      8    /* attivazione o meno z-buffering */
  44.  
  45. /** STRUTTURE DATI DI USO ESTERNO ED INTERNO **/
  46. /* vertice, usa formato float a virgola fissa ,(val*FIXV) */ 
  47. struct vertex
  48. {
  49. long int x;
  50. long int y;
  51. long int z;
  52. };
  53.  
  54. /* struttura per definizione colore */
  55. struct rgbtype
  56. {
  57. short int r;
  58. short int g;
  59. short int b;
  60. };
  61.  
  62. /* struttura tag3d per definire un array di valori estendibile */
  63. /* analogo alla struttura TagItem dell' Amiga O.S.             */
  64. struct tag3d
  65. {
  66. short unsigned int tipo;    /* flag che identifica valore 
  67.                         (se=0 fine array) */
  68. long int val;            /* valore effettivo */
  69. };         
  70.  
  71. /* !!! STRUTTURE E DEFINIZIONI GLOBALI DI USO ESCLUSIVAMENTE INTERNO !!! */
  72.  
  73. /** COSTANTI DI USO SOLO INTERNO **/
  74. #define MAXPOINT  4    /* massimo numero di punti per poligono */
  75. #define MAXOBJECT 150    /* massimo numero oggetti per mondo 3D (max. 65535)*/
  76. #define MAXPLFRAM 20000    /* massimo numero poligoni in una frame (16*12) */
  77. #define MAXVERT   6300    /* massimo numero vertici in un poligono */
  78. #define MAXDX      3000  /* massima larghezza box di visualizzazione */
  79. #define MAXDY      3000    /* massima altezza box di visualizzazione */
  80.  
  81. /************ macro solo locali *******/
  82. #define SMARG  16 
  83. #define SMARGM 8
  84. #define LTMP 1000
  85. #define ATMP 1000
  86.  
  87. /* matrice di trasformazione (4x4) */
  88. /* usa formato float a virgola fissa ,(val*FIXV) */ 
  89. struct matrix4x4
  90. {
  91. long int r0c0;
  92. long int r0c1;
  93. long int r0c2;
  94. long int r0c3;
  95. long int r1c0;
  96. long int r1c1;
  97. long int r1c2;
  98. long int r1c3;
  99. long int r2c0;
  100. long int r2c1;
  101. long int r2c2;
  102. long int r2c3;
  103. long int r3c0;
  104. long int r3c1;
  105. long int r3c2;
  106. long int r3c3;
  107. };
  108.  
  109. /* matrice di trasformazione (1x4) */
  110. /* usa formato float a virgola fissa ,(val*FIXV) */ 
  111. struct matrix1x4
  112. {
  113. long int r0c0;
  114. long int r0c1;
  115. long int r0c2;
  116. long int r0c3;
  117. };
  118.  
  119. /* vettore */
  120. /* usa formato float a virgola fissa ,(val*FIXV) */ 
  121. struct vector
  122. {
  123. long int x;
  124. long int y;
  125. long int z;
  126. long int w;
  127. };
  128.  
  129. /* vertice + colore, usa formato float a virgola fissa ,(val*FIXV) */ 
  130. struct vert1
  131. {
  132. long int x;
  133. long int y;
  134. long int z;
  135. short int color;    /* colore vertice in flat shading */
  136. short int npol;        /* n# di volte vertice usato */
  137. };
  138.  
  139. /* pixel */
  140. /* usa formato intero a 2 bytes */
  141. struct pixel
  142. {
  143. short int x;
  144. short int y;
  145. };
  146.  
  147. /* struttura per definire una linea */
  148. /* usa due riferimenti a strutture vertice */
  149. struct line
  150. {
  151. struct vertex *a;        /* puntatore a st. vertex di partenza */
  152. struct vertex *b;        /* puntatore a st. vertex d'arrivo */
  153. };
  154.  
  155. /* struttura per definire direzione in spazio 3d */
  156. struct dir3d
  157. {
  158. long int angx;
  159. long int angy;
  160. long int angz;
  161. };
  162.  
  163. /* struttura pixel usata nella versione _CPU per disegnare i poligoni */
  164. struct pixl {
  165.     long int x;
  166.     long int y;
  167.     long int z;
  168.     long int color;
  169.     };
  170.  
  171. /* elementi tabelle scan line nel goraud shading */
  172. struct edge {
  173.     short int x;
  174.     short int color;
  175.     long int z;
  176.     };
  177.  
  178. /* struttura per definizione di un poligono */
  179. struct polygon
  180. {
  181. char numpoints;
  182. short int color;
  183. short int shade;
  184. char twosided;
  185. char visible;
  186. char clipped;
  187. char active;
  188. long int vertexlist0;    /* puntatore a #1 indice vertici */ 
  189. long int vertexlist1;     /* puntatore a #2 indice vertici */
  190. long int vertexlist2;     /* puntatore a #3 indice vertici */ 
  191. long int vertexlist3;    /* puntatore a #4 indice vertici */
  192. char dummy;        /* per far si che la lunghezza sia pari */
  193. };
  194.  
  195. /* struttura di descrizione di un oggetto */
  196. struct objectnode
  197. {
  198. long int id;        /* identificativo univoco per oggetto */
  199. long int dummy;        /* pad per poter usare name con StringF */ 
  200. char name[22];
  201. long int numverts;
  202. struct vertex *vorig;    /* puntatore a elenco vertici loc. orig. */
  203. struct vertex *vlocal;    /* puntatore a elenco vertici locali */
  204. struct vert1  *vcamera;    /* puntatore a elenco vertici camera */
  205. long int numpolys;
  206. struct polygon *polys;    /* puntatore a elenco poligoni */
  207. char shade;        /* metodo di visualiz. (WIRE,SOLID,FLAT,GORAUD) */
  208. char state;        /* segnala se oggetto da visualizzare */
  209. char clipped;        /* segnala se oggetto clippato interamente*/
  210. char trasf;        /* flag per segnalare eventuale trasf. avv.*/
  211. long int worldposx;    /* coord. x punto d'inserzione oggetto */
  212. long int worldposy;    /* coord. y  "        "          "     */
  213. long int worldposz;    /* coord. z  "        "          "     */
  214. long int xmax;        /* vertici bounding box oggetto */
  215. long int ymax;        /*              "               */
  216. long int zmax;        /*        "        */
  217. long int xmin;        /*        "        */
  218. long int ymin;        /*        "        */
  219. long int zmin;        /*        "        */    
  220. };
  221.  
  222. /* struttura per definizione di un poligono da visualizzare */
  223. struct polytemp
  224. {
  225. short int    x1;
  226. short int    y1;
  227. short int    x2;
  228. short int    y2;
  229. short int    x3;
  230. short int    y3;
  231. short int    x4;
  232. short int    y4;
  233. short int    x5;
  234. short int    y5;
  235. short int numpoints;
  236. short int     shade;
  237. short int       obj;
  238. long  int      npol;
  239. long  int    svalue;
  240. char          vmode;
  241. char          clp1;
  242. char          clp2;
  243. char           clp3;
  244. char          clp4;
  245. long   int    z1;
  246. long   int    z2;
  247. long   int    z3;
  248. long   int    z4;
  249. char          dummy;
  250. };
  251.  
  252. /** 
  253.     struttura di descrizione generale ambiente, il puntatore ad essa 
  254.     va dato come primo parametro al richiamo di ogni funzione 
  255.     dall'esterno
  256. **/
  257. struct ambient3d
  258. {
  259. struct grafica *graf;        /* valore ritornato da PE_ini_g */
  260. struct Window *win;        /* punt. a finestra usata */
  261. long int half_screen_width;
  262. long int half_screen_height;
  263. long int viewing_distance;
  264. short int gl_triangle_color;
  265. short int minx;
  266. short int miny;
  267. short int maxx;
  268. short int maxy;
  269. short int maxintensity;
  270. long int near_z;
  271. long int far_z;
  272. long int zoom;            /* num. reale a virgola fissa (val*FIXV) */
  273. long int aspect_ratio;        /* num. reale a virgola fissa (val*FIXV) */
  274. long int ambient_light;        /* num. reale a virgola fissa (val*FIXV) */
  275. long int inv_aspect_ratio;    /* num. reale a virgola fissa (val*FIXV) */
  276. long int bord_col;        /* colore bordo poligoni (se <0 no bordo)*/
  277. long int gcolor;        /* colore sfondo scena */
  278. char projection_type;        /* tipo di proiezione (0=pros. 1=paral.) */
  279. char view_mode;            /* modo vis. (1=flat 0=wire 2=solid 3=goraud) */
  280. char fzbuf;            /* flag attivazione zbuffer (1=si 0=no) */
  281. char clip_mode;
  282. char agg_all;            /* flag per forzare aggiornamento scena */
  283. long int dummy;
  284. struct vector light_source;    /* puntatore a struttura vector */
  285. long int dummy1;
  286. struct vector view_point;    /* puntatore a struttura vector */ 
  287. struct dir3d view_angle;    /* puntatore a struttura dir3d */
  288. struct matrix4x4 global_view;    /* puntatore a struttura matrix4x4 */
  289. char *temp;            /* puntatore ad area per uso temporaneo */
  290. long int ltemp;            /* lunghezza area temp */
  291. long int *iobjects;        /* punt. ad array con indici su objects */
  292. struct objectnode *objects;    /* punt. ad array di strutture objectnode */
  293. long int *iwpolys;        /* punt. ad array puntatori su worldpolys */
  294. struct polytemp *worldpolys;    /* punt. ad array di strutture polytemp */
  295. long int *sintable;        /* punt. ad array di reali a virg. fissa */
  296. long int *costable;        /* punt. ad array di reali a virg. fissa */
  297. long int total_polys;        /* n# totale poligoni da tracciare */
  298. short int total_objects;    /* n# totale oggetti presenti */
  299. long int attuale;        /* oggetto attualmente selezionato */
  300. long int numero;        /* numero inc. alla creazione di un oggetto*/
  301. long int iterazioni;        /* n# iterazioni per sorting */
  302. char dummyy;
  303. };
  304.  
  305. /* !!! STRUTTURE E DEFINIZIONI GLOBALI DI USO ESCLUSIVAMENTE INTERNO !!! */
  306.  
  307. #define MAXVER(vert) (vert*5+30)
  308.  
  309. /**** dichiarazioni per poter usare sizeof con queste strutture  ****/
  310. /**** probabilmente utile solo se si usa VBCC v0.5 ****/
  311.  
  312. typedef struct grafica Sgrafica;
  313. typedef struct AreaInfo SAreaInfo;
  314. typedef struct TmpRas STmpRas;
  315. typedef struct RastPort SRastPort;
  316. typedef struct objectnode Sobjectnode;
  317. typedef struct vertex Svertex;
  318. typedef struct vert1 Svert1;
  319. typedef struct polygon Spolygon;
  320. typedef struct vector Svector;
  321. typedef struct polytemp Spolytemp;
  322. typedef struct dir3d Sdir3d;
  323. typedef struct matrix4x4 Smatrix4x4;
  324. typedef struct ambient3d Sambient3d;
  325. typedef struct edge Sedge;
  326.  
  327. /********************************************************************/
  328.  
  329. struct grafica
  330. {
  331.  struct AreaInfo *o_ai;    /* valore originale puntatore ad areainfo */
  332.  struct TmpRas *o_tr;    /* valore originale puntatore ad tmprast */    
  333.  struct AreaInfo n_ai;    /* nuova areainfo */
  334.  struct TmpRas n_tr;    /* nuova tmpras */
  335.  char *pras;        /* puntatore a area di memoria grafica */
  336.  char *b_af;        /* puntatore a buffer vettori per areafill */
  337.  long int lb_af;    /* dimensioni area precedente */
  338.  struct ViewPort *vpor;    /* puntatore a viewport dello schermo della fin.*/
  339.  struct RastPort *rast;    /* puntatore a rastport usato dalle routin */
  340.  struct Window *wind;    /* puntatore a finestra su cui agire */
  341.  long int larg;        /* larghezza box in cui lavorera' areafill */
  342.  long int alte;        /* altezza box in cui lavorera' areafill */
  343.  short int clipx;    /* origine x clip box */
  344.  short int clipy;     /* origine y clip box */
  345.  short int clipdx;    /* larghezza clip box */
  346.  short int clipdy;    /* altezza clip box */
  347.  long int *zbuf;    /* puntatore ad area per z-buffering */
  348.  long int lzbuf;    /* lunghezza area precedente */
  349. /** estensioni per double buffering **/
  350.  char    fdouble;    /* flag per attivare double buffer (0=off 1=on)*/
  351.     /** campi usati da libreria ottimizzata **/
  352.  char *dbuf;        /* puntatore ad display buffer chunky*/
  353.  long int ldbuf;    /* lunghezza in bytes di area dbuf */
  354.  struct RastPort tmp_rp;/* rastport temporanea */
  355.     /******************************************/
  356.  struct RastPort *rast1;/* puntatore a rastport della finestra*/
  357.  struct RastPort *rast2;/* puntatore a rastport nascosto */
  358.     /** campi usati da libreria normale **/
  359.  struct RasInfo    *NB_rinfo;       
  360.  struct BitMap     *NB_bmap;        
  361.  struct Layer_Info *NB_layerinfo;   
  362.  struct Layer      *NB_layer;       
  363.     /*************************************/
  364. };
  365.  
  366.  
  367. #endif /* GRAPHICS3D_GRAPHICS3D_H */
  368.